package com.sc.nft.annotation;


import com.sc.nft.constant.DistributedLockConstant;

import java.lang.annotation.*;

/**
 * @author wanghui
 * @Description: 基于注解的分布式式锁
 * @date 2021/7/25下午9:22
 */
@Documented
@Inherited
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
public @interface DistributedLock {

    /**
     * 锁的名称
     */
    String[] value() default "redisson";


    /**
     * 拼接符
     * 例如key为  1,2,3 的数组的形式
     * 拼接符为:
     * 结果: 1:2:3
     */
    String segmentation() default ":";

    /**
     * 锁的有效时间
     */
    int leaseTime() default 10;

    /**
     * 是否自动续期
     *
     * @return
     */
    boolean isPostPone() default true;

    /**
     * 模式
     * LOCK为普通模式,加锁会一直循环阻塞获取
     * TRY_LOCK可以设置等待时间.超出等待时间获取锁失败直接抛出异常.
     */
    int pattern() default DistributedLockConstant.LOCK;

    /**
     * tru_lock模式下,对等待时间设置参数.
     */
    int waitTime() default 0;


    /**
     * 异常抛出超时的时候,返回的文案
     */
    String message() default "请求频次过高";

    /**
     * 异常码
     */
    String errorCode() default "500";
}
